// import { client } from require("../utils/redis")

import Sms from "../models/Sms.js"
import User from "../models/User.js"
import redis from "../utils/redis.js"
import { Sequelize } from 'sequelize'

class UserService {
    async getUserById(userId) {
        redis.set('redis', 11)
        // const c = await client().set('dd', 2)
        // await c.set('aa', 11)
        // await User.getById(1)
        await User.saveData({
            username: '测试',
            email: '1235625@qq.com'
        })


        // await User.createManyData([
        //     {
        //         username: '测试1',
        //         email: '123@qq.com'
        //     },
        //     {
        //         username: '测试2',
        //         email: '123@qq.com'
        //     }
        // ])

        // await User.updateOneBy({
        //     id: 1
        // }, {
        //     username: '测试1',
        // })

        // await User.updateBy({
        //     id: ['in', [1,2,3]]
        // }, {
        //     username: '测试1',
        // })

        // await User.deleteByWhere({
        //     id: ['in', [1,2,3]]
        // })

        // const count = await User.getCount({
        //     id: ['in', [1]]
        // })

        // const count = await User.getSum({
        //     where: { id: ['in', [4]] },
        //     include: [
        //         {
        //             where: { user_id: userId },
        //             model: Sms,
        //             required: true,
        //             as: 'bb'
        //         }
        //     ]
        // }, 'user.id')

        const data = await User.findOneBy({
            where: { id: ['in', [11, 12]] },
            // include: [
            //     {
            //         where: { user_id: userId },
            //         model: Sms,
            //         required: false,
            //         as: 'bb'
            //     }
            // ]
        }, [], [['id', 'ASC'], ['username', 'DESC']])

        // const data = await User.getById(4, ['id'])
        
        // const filter = {
            // id: 1,
            // id: ['in', [1, 2]],
            // id: ['notIn', [1, 2]],
            // id: ['<>', 1],
            // id: ['>', 1]
            // id: ['>=', 1]
            // id: ['<', 1]
            // id: ['<=', 1]
            // created_at: ['between', ['2023-01-13 13:51:05', '2023-04-09 13:51:05']],
            // updated_at: ['notBetween', ['2023-01-13 13:51:05', '2023-04-09 13:51:05']],
            // username: ['like', '%小夏%'],
            // email: ['like', '%小夏%'],
            // aa: [
            //     'or',
            //     { id:  1 },
            //     { username: ['like', '%小夏%'] }
            // ],
            // aa: [
            //     'and',
            //     { id: ['>', 1] },
            //     { id: ['<', 7] }
            // ]
            // id: ['isnull']
            // age: ['or', [5, 6]]
        // }

        // const filter = { where: {}, include: [] }

        // filter.where = {
        //     username: ['like', '%a%'],
        // }
        // filter.include = [
        //   {
        //     where: { user_id: userId },
        //     model: Sms,
        //     required: true,
        //     as: 'bb'
        //   }
        // ]

        // const list = await User.getList(filter, [], 1, 5)
        
        // await User.assocs()

        // const list1 = await User.getUserWithProfile(4)

        // const userWithProfile = await User.findAll({
            // where: { id: userId },
        //     attributes: ['id'],
        //     limit: 1,
        //     include: 
        //         {
        //             where: { id: userId },
        //             model: Sms,
        //             required: true,
        //             as: 'bb'
        //         }
            
            
        // })
    
        // return userWithProfile

        return data
    }

    async list()
    {
        const filter = { where: {}, include: [], raw: true }

        filter.include = [
          {
            attributes: [[Sequelize.col('mobile'), 'mobile']],
            model: Sms,
            required: true,
            as: 'sms'
          }
        ]

        const list = await User.getList(filter, ['username', 'created_at'], 1, 5)

        return list
    }
}

export default UserService